home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / c / bplus25a.zip / BPLUS.H < prev    next >
Text File  |  1990-12-29  |  3KB  |  73 lines

  1.  
  2. /*  bplus.h - data structures and constants  */
  3.  
  4.  
  5. #define IX_OK       1
  6. #define IX_FAIL     0
  7. #define LOCK_FAIL  (-1)
  8. #define EOIX       (-2)
  9. #define MAXKEY      100
  10. #define NUM_BUFS    8
  11. #define MAX_LEVELS  8
  12. #define IXB_SIZE    1024
  13. #define IXB_SPACE  (IXB_SIZE - sizeof(int) - sizeof(long) * 2)
  14.  
  15. typedef long RECPOS;
  16.  
  17. typedef struct                    /*  entry structure in index        */
  18.   {  RECPOS   idxptr;             /*  points to lower index level     */
  19.      RECPOS   recptr;             /*  points to data record           */
  20.      char     key[MAXKEY];        /*  start of record key             */
  21.   }  ENTRY;
  22.  
  23. typedef struct                    /*  index record format             */
  24.   {  RECPOS   brec;               /*  position in index file          */
  25.                                   /*  or location of next free block  */
  26.      int      bend;               /*  first unused block location     */
  27.      RECPOS   p0;                 /*  points to next level            */
  28.      char     entries[IXB_SPACE]; /*  here are the key entries        */
  29.   }  BLOCK;
  30.  
  31. typedef struct                    /*  disk file info                  */
  32.   {  RECPOS   ff;                 /*  location of first free block    */
  33.      int      nl;                 /*  number of index levels          */
  34.   }  IX_DISK;
  35.  
  36. typedef struct                    /*  memory buffer pool of indx blks */
  37.   {  int      dirty;              /*  true if changed                 */
  38.      int      handle;             /*  index file handle               */
  39.      int      count;              /*  number of times referenced      */
  40.      BLOCK    mb;
  41.   }  MEMBLOCK;
  42.  
  43. typedef struct
  44.   {  MEMBLOCK     cache [ NUM_BUFS ];
  45.   }  IX_BUFFER;
  46.  
  47. typedef struct                    /*  in-memory index descriptor      */
  48.   {  int      ixfile;
  49.      int      root_dirty;         /*  true if root changed            */
  50.      int      level;              /*  level in btree                  */
  51.      int      duplicate;          /*  no duplicate keys if 0          */
  52.      struct
  53.        {  RECPOS    cblock;       /*  position in index file          */
  54.           int       coffset;      /*  current offset within block     */
  55.        }  pos [ MAX_LEVELS ];
  56.      BLOCK    root;               /*  root index record               */
  57.      IX_DISK  dx;
  58.   }  IX_DESC;
  59.  
  60. int cdecl open_index(char *,IX_DESC *, int);
  61. int cdecl close_index(IX_DESC *);
  62. int cdecl make_index(char *,IX_DESC *, int);
  63. int cdecl first_key(ENTRY *, IX_DESC *);
  64. int cdecl last_key(ENTRY *, IX_DESC *);
  65. int cdecl next_key(ENTRY *, IX_DESC *);
  66. int cdecl prev_key(ENTRY *, IX_DESC *);
  67. int cdecl find_key(ENTRY *, IX_DESC *);
  68. int cdecl add_key(ENTRY *, IX_DESC *);
  69. int cdecl locate_key(ENTRY *, IX_DESC *);
  70. int cdecl delete_key(ENTRY *, IX_DESC *);
  71. int cdecl find_exact(ENTRY *, IX_DESC *);
  72. void cdecl buffer_flush(IX_DESC *);
  73.